for (var i = 0; i < 3; i++) {
    setTimeout(function () {
        console.log("timeout" + i);
    });
}
new Promise(function (resolve) {
    console.log("promise" + i);
    for (var i = 0; i < 1000; i++) {
        i == 99 && resolve();
    }
    console.log("promise" + i);
}).then(function () {
    console.log("then" + i);
});
console.log("global" + i);

// 总结执行顺序：
// 1. 同步执行外部for循环，i从0到3，设置三个setTimeout回调。
// 2. 执行new Promise的executor函数：
// a. 函数内部var i被提升，初始化为undefined。
// b. 第一个console.log("promise" + i)输出promiseundefined。
// c. 进入for循环，i从0开始，循环到i=99时resolve()，但循环继续到i=999，i++到1000后退出。
// d. 第二个console.log("promise" + i)输出promise1000。
// 3. 执行外部的console.log("global" + i)，i是3，输出global3。
// 4. 同步代码执行完毕，开始处理微任务队列中的.then回调，输出then3，因为外部的i是3。
// 5. 最后执行宏任务队列中的三个setTimeout回调，输出三次timeout3。
// 因此，最终的打印顺序是：
// promiseundefined
// promise1000
// global3
// then3
// timeout3
// timeout3
// timeout3